package com.ads.tpgrupo4.domain.cpr.facturacion;

import java.math.BigDecimal;
import java.util.Date;
import java.util.HashSet;
import java.util.LinkedList;
import java.util.List;
import java.util.Set;

import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.persistence.OneToMany;
import javax.persistence.OneToOne;

import com.ads.tpgrupo4.domain.cpr.core.Cliente;
import com.ads.tpgrupo4.domain.cpr.core.PersistentObject;
import com.ads.tpgrupo4.domain.cpr.remito.RemitoACliente;

@Entity
public class Factura extends PersistentObject {

	private static final long serialVersionUID = 1L;

	private Long numero;
	
	private EstadoFactura estadoFactura;
	
	private Date fechaEmision;
	
	private Date fechaPago;
	
	private Date fechaVencimiento;
	
	private BigDecimal monto;
	
	private BigDecimal iva;
	
	private BigDecimal ingresosBrutos;
	
	@OneToOne
	private Cliente cliente;

	@OneToMany(cascade = {CascadeType.ALL} )
	private Set<RemitoACliente> remitos;
	
	@OneToMany(cascade = {CascadeType.ALL} )
	private List<ItemFactura> items;
	
	public Factura() {
		
		this.estadoFactura = EstadoFactura.EMITIDO;
		this.items = new LinkedList<ItemFactura>();
		this.setRemitos(new HashSet<RemitoACliente>());
	}
	
	public Long getNumero() {
		return numero;
	}

	public void setNumero(Long numero) {
		this.numero = numero;
	}


	public Date getFechaEmision() {
		return fechaEmision;
	}
	
	public void setFechaEmision(Date fechaEmision) {
		this.fechaEmision = fechaEmision;
	}
	
	public Date getFechaVencimiento() {
		return fechaVencimiento;
	}
	
	public void setFechaVencimiento(Date fechaVencimiento) {
		this.fechaVencimiento = fechaVencimiento;
	}
	
	public Cliente getCliente() {
		return cliente;
	}
	
	public void setCliente(Cliente cliente) {
		this.cliente = cliente;
	}

	public List<ItemFactura> getItems() {
		return items;
	}

	public void setItems(List<ItemFactura> items) {
		this.items = items;
	}

	public EstadoFactura getEstadoFactura() {
		return estadoFactura;
	}

	public void setEstadoFactura(EstadoFactura estadoFactura) {
		this.estadoFactura = estadoFactura;
	}

	public Date getFechaPago() {
		return fechaPago;
	}

	public void setFechaPago(Date fechaPago) {
		this.fechaPago = fechaPago;
	}

	public BigDecimal getMonto() {
		return monto;
	}

	public void setMonto(BigDecimal monto) {
		this.monto = monto;
	}

	public BigDecimal getIva() {
		return iva;
	}

	public void setIva(BigDecimal iva) {
		this.iva = iva;
	}

	public BigDecimal getIngresosBrutos() {
		return ingresosBrutos;
	}

	public void setIngresosBrutos(BigDecimal ingresosBrutos) {
		this.ingresosBrutos = ingresosBrutos;
	}

	public Set<RemitoACliente> getRemitos() {
		return remitos;
	}

	public void setRemitos(Set<RemitoACliente> remitos) {
		this.remitos = remitos;
	}
	
}
